extends Node
###
###@onready var ui: Control = $UI
###@onready var players: Node = $players
###@onready var host: Button = $UI/VBoxContainer/host
###@onready var join: Button = $UI/VBoxContainer/HBoxContainer2/join
###@onready var line_edit: LineEdit = $UI/VBoxContainer/HBoxContainer2/LineEdit
###@onready var 通知: Label = $UI/通知
###@onready var 服务器广播: Node = $自动联机/服务器广播
###@onready var 客户端监听: keHuDuanJianTing = $自动联机/客户端监听
###
###
###var server_countn = keHuDuanJianTing.server_count
###var first_server = keHuDuanJianTing.first_server_info
###const serverPOST:int =7153
###const MAIN_PLAYER = preload("uid://id8t07pq47ty")
###const wifi地址:="192.168.31.72"
###var peer:=ENetMultiplayerPeer.new()
###
###func _ready() -> void:
	###print_Local_IP4_Add()
	###multiplayer.peer_connected.connect(_on_peer_connected)
	###multiplayer.connected_to_server.connect(_on_connected_to_server)
	###multiplayer.connection_failed.connect(_on_connection_failed)
	###multiplayer.peer_disconnected.connect(_on_peer_disconnected)
	###multiplayer.server_disconnected.connect(_on_server_disconnected)
	###ProjectSettings.set_setting("input_devices/pointing/emulate_mouse_from_touch",true)
	###
###
###func _on_connected_to_server():
	###print("客户端成功连接服务器")
	###
	###pass
###
###func _on_host_button_up() -> void:
	###ui.visible=false
	###ProjectSettings.set_setting("input_devices/pointing/emulate_mouse_from_touch",false)
	###peer.create_server(serverPOST) 
	###multiplayer.multiplayer_peer=peer
	###add_player(peer.get_unique_id())
	###print("sever_player创建")
	###
###func _on_join_button_up() -> void:
	###
	###ProjectSettings.set_setting("input_devices/pointing/emulate_mouse_from_touch",false)
	####var loc_ip:=line_edit.text
	###var loc_ip=客户端监听.first_server_info[address]
	###if "192.168." not in loc_ip:
		###通知.text="IP地址错误，请核对"
		###return
	###var error = peer.create_client(str(loc_ip), serverPOST)
	###if error == OK:
		###multiplayer.multiplayer_peer = peer
		###通知.text="连接成功！"
		###ui.visible=false
	###else:
		###print(error)
		###通知.text="连接失败！IP地址错误，请核对  _ERROR["+str(error)+"]"
		###return
		###
###func _on_peer_connected(idd :int):
	###var self_id=str(multiplayer.get_unique_id())
	###print("本机对等点属性ID是"+self_id)
	###print("连接目标对等点ID为："+str(idd))
	###print("————————————————————————————————————————————————————————————————————————")		
	###print(" ")
	###if self_id=="1":
		###add_player(idd)
		###
###func print_Local_IP4_Add()->void:#控制台输出内网地址
	###var ip=IP.get_local_addresses()
	###for i in ip:
		###if ":" not in i:
			###if "192.168" in i:
				###pass
				####print(i)
###func _on_connection_failed(id :int):#无法与服务器建立连接时发出。仅在客户端上发出。
	###通知.text="IP地址下未找到服务器"
	###ui.visible=true
	###print("connection_failed"+"本机对等点ID为："+str(id))
	###pass
###func _on_peer_disconnected(id :int):#与对等体断开连接时发出。当某个客户端从同一服务器断开连接时，其他客户端会收到通知。
	###ui.visible=true
	###print("客户端_disconnected"+"本机对等点ID为："+str(id))
	###var node = players.get_node(str(id))
	###
	###var node1 = players.get_node(str(1))
	###if node:players.remove_child(node)#删掉客户端玩家
	###players.remove_child(node1)
		###
	###
###func _on_server_disconnected(id :int):#与服务器断开连接时发出。仅在客户端上发出。
	###ui.visible=true
	###print("服务器_disconnected"+"本机对等点ID为："+str(id))
	###pass
###func add_player(id:int):
	###var player=MAIN_PLAYER.instantiate() as Player
	###player.name=str(id)
	###print(str(id)+"负值idd")
	###player.set_multiplayer_authority(1)#处理权限归属服务器
	###players.add_child(player)
###
###
###func _on_本地测试_button_up() -> void:
	###ProjectSettings.set_setting("input_devices/pointing/emulate_mouse_from_touch",false)
	###var loc_ip:="127.0.0.1"
	###if false:
		###通知.text="IP地址错误，请核对"
		###return
	###var error = peer.create_client(str(loc_ip), serverPOST)
	###if error == OK:
		###multiplayer.multiplayer_peer = peer
		###通知.text="连接成功！"
		###ui.visible=false
	###else:
		###print(error)
		###通知.text="连接失败！IP地址错误，请核对  _ERROR["+str(error)+"]"
		###return
		###
		##
		
		#
#
#
#
#
##
#
#
#
#
##
#
#
#
#
##
#
#
#
#
#
		### 在其他脚本中控制广播器
##@onready var broadcaster = $服务器广播  # 获取服务器广播节点的引用
##
##func _ready():
	### 初始化时可以根据需要启动或停止广播
	### broadcaster.start_broadcasting()  # 启动广播
	### broadcaster.stop_broadcasting()   # 停止广播
	##pass
##
##func _process(delta):
	### 检查广播器状态
	##if broadcaster.is_active:
		### 广播器正在运行
		### 可以在这里添加广播器运行时的逻辑
		##pass
	##else:
		### 广播器已停止
		### 可以在这里添加广播器停止时的逻辑
		##pass
##
### 控制广播器的函数示例
##func _on_start_button_pressed():
	##"""开始广播按钮按下时的处理函数"""
	##broadcaster.start_broadcasting()  # 启动服务器广播
	##print("服务器广播已启动")
##
##func _on_stop_button_pressed():
	##"""停止广播按钮按下时的处理函数"""
	##broadcaster.stop_broadcasting()   # 停止服务器广播
	##print("服务器广播已停止")
##
##func _on_toggle_button_pressed():
	##"""切换广播状态按钮按下时的处理函数"""
	##broadcaster.toggle_broadcasting() # 切换广播状态（开启/关闭）
	##print("切换广播状态")
##
##func _on_restart_button_pressed():
	##"""重启广播器按钮按下时的处理函数"""
	##broadcaster.restart_broadcaster() # 完全重启广播器
	##print("广播器已重启")
##
### 获取广播器状态信息的函数示例
##func check_broadcaster_status():
	##"""检查并打印广播器状态信息"""
	##if broadcaster.is_active:
		##print("广播器状态: 运行中")
		##if broadcaster.is_broadcasting:
			##print("正在广播服务器信息")
		##else:
			##print("广播器已激活但未广播")
	##else:
		##print("广播器状态: 已停止")
	##
	### 打印广播配置信息
	##print("广播端口:", broadcaster.broadcast_port)
	##print("游戏TCP端口:", broadcaster.game_tcp_port)
	##print("广播间隔:", broadcaster.broadcast_interval)
	##print("服务器名称:", broadcaster.server_name)
##
### 修改广播器配置的示例
##func update_broadcaster_settings():
	##"""更新广播器配置"""
	##broadcaster.server_name = "新的服务器名称"  # 修改服务器名称
	##broadcaster.broadcast_interval = 2.0      # 修改广播间隔为2秒
	##broadcaster.broadcast_port = 7766         # 修改广播端口
	##
	### 重启广播器使新设置生效
	##broadcaster.restart_broadcaster()
##
### 输入处理示例 - 通过键盘控制广播器
##func _input(event):
	##"""通过键盘控制广播器"""
	### 按F8键切换广播状态
	##if event is InputEventKey and event.pressed and event.keycode == KEY_F8:
		##broadcaster.toggle_broadcasting()
		##print("F8键按下 - 切换广播状态")
	##
	### 按F9键重启广播器
	##if event is InputEventKey and event.pressed and event.keycode == KEY_F9:
		##broadcaster.restart_broadcaster()
		##print("F9键按下 - 重启广播器")
	##
	### 按F10键打印广播器状态
	##if event is InputEventKey and event.pressed and event.keycode == KEY_F10:
		##check_broadcaster_status()
##
### 场景切换时的处理示例
##func _exit_tree():
	##"""节点被移除时自动停止广播"""
	##broadcaster.stop_broadcasting()  # 确保广播器正确停止
	##print("场景切换，广播器已停止")
##
### 连接信号示例（如果广播器添加了相关信号）
##func _connect_broadcaster_signals():
	##"""连接广播器的信号（如果广播器有定义信号）"""
	### 示例：如果广播器有广播开始和停止的信号
	### broadcaster.broadcast_started.connect(_on_broadcast_started)
	### broadcaster.broadcast_stopped.connect(_on_broadcast_stopped)
	##pass
##
##func _on_broadcast_started():
	##"""广播开始时调用的函数（如果广播器有此信号）"""
	##print("服务器广播已开始")
##
##func _on_broadcast_stopped():
	##"""广播停止时调用的函数（如果广播器有此信号）"""
	##print("服务器广播已停止")
#
#
#
#
#
#


#
#
#
#
#
##
#
#
#
#
##
#
#
#
#
##
#
#
#
#
##
#
#
#
#
#

## 在其他脚本中使用客户端监听器
#@onready var client_listener = $客户端监听  # 获取客户端监听节点的引用
#
#func _ready():
	## 初始化时可以根据需要启动或停止监听
	#client_listener.start_scanning()  # 启动扫描
	#print("客户端监听器已启动")
#
#func _process(delta):
	## 检查监听器状态和发现的服务器
	#if client_listener.is_active:
		## 监听器正在运行
		#if client_listener.has_servers():
			## 发现有服务器
			#var server_count = client_listener.server_count
			#var first_server = client_listener.first_server_info
			#
			## 使用第一个服务器的信息
			#if first_server.address != "":
				## 可以在这里处理服务器信息，例如更新UI
				#update_server_display(first_server)
		#else:
			## 未发现服务器
			#update_no_servers_display()
	#else:
		## 监听器已停止
		#update_listener_stopped_display()
#
## 更新服务器显示的函数
#func update_server_display(server_info: Dictionary):
	#"""更新UI显示服务器信息"""
	## 示例：更新UI元素显示服务器信息
	## server_name_label.text = server_info.name
	## server_address_label.text = server_info.address
	## server_port_label.text = str(server_info.port)
	#print("发现服务器:", server_info.name, "地址:", server_info.address, "端口:", server_info.port)
#
#func update_no_servers_display():
	#"""更新UI显示未发现服务器"""
	## 示例：更新UI显示未发现服务器
	## server_status_label.text = "未发现服务器"
	#print("未发现服务器")
#
#func update_listener_stopped_display():
	#"""更新UI显示监听器已停止"""
	## 示例：更新UI显示监听器已停止
	## server_status_label.text = "监听器已停止"
	#print("监听器已停止")
#
## 控制监听器的函数示例
#func _on_start_scan_button_pressed():
	#"""开始扫描按钮按下时的处理函数"""
	#client_listener.start_scanning()  # 启动扫描
	#print("开始扫描服务器")
#
#func _on_stop_scan_button_pressed():
	#"""停止扫描按钮按下时的处理函数"""
	#client_listener.stop_scanning()   # 停止扫描
	#print("停止扫描服务器")
#
#func _on_restart_scan_button_pressed():
	#"""重启扫描按钮按下时的处理函数"""
	#client_listener.restart_scanner()  # 重启扫描器
	#print("重启扫描器")
#
## 获取服务器列表并连接的示例
#func _on_connect_to_server_button_pressed():
	#"""连接到服务器按钮按下时的处理函数"""
	#if client_listener.has_servers():
		#var first_server = client_listener.get_first_server()
		#if first_server.address != "":
			## 使用服务器信息建立连接
			#connect_to_server(first_server.address, first_server.port)
		#else:
			#print("无法获取服务器信息")
	#else:
		#print("未发现可用的服务器")
#
#func connect_to_server(address: String, port: int):
	#"""连接到指定服务器的函数"""
	#print("正在连接到服务器:", address, ":", port)
	## 这里添加实际的连接逻辑
	## var peer = ENetMultiplayerPeer.new()
	## var result = peer.create_client(address, port)
	## if result == OK:
	##     multiplayer.multiplayer_peer = peer
	##     print("连接成功")
	## else:
	##     print("连接失败")
#
## 输入处理示例 - 通过键盘控制监听器
#func _input(event):
	#"""通过键盘控制监听器"""
	## 按F5键手动扫描
	#if event is InputEventKey and event.pressed and event.keycode == KEY_F5:
		#client_listener.scan_now()
		#print("F5键按下 - 手动扫描")
	#
	## 按F6键清空服务器列表
	#if event is InputEventKey and event.pressed and event.keycode == KEY_F6:
		#client_listener.clear_servers()
		#print("F6键按下 - 清空服务器列表")
	#
	## 按F7键切换扫描状态
	#if event is InputEventKey and event.pressed and event.keycode == KEY_F7:
		#client_listener.toggle_scanning()
		#print("F7键按下 - 切换扫描状态")
